查看原文
其他

体验明星团队Fixie和Dust的产品

Padawan 黑暗面的力量 2024-04-14

Fixie和Dust

ChatGPT走红以来,很多大佬投身大模型研发,也有很多人围绕大语言模型搭建各种应用。类比手机操作系统,云服务等生态,一个比较公允的猜想是,最后会有少数几家大模型胜出(两三个巨头),但是会有很多基于大模型的应用。所以如何构建LLM应用,以及应用开发需要什么工具和平台,也是一个主要探索方向。相关的Prototype和开源项目,一经问世都迅速走红融资的项目也不少,比较流行的应用开发的开源工具包,Langchain,估值已经达到2亿美元。

LLM应用的开发者必定有很多共性的需求,给开发者提供服务的平台应该会在生态里有一席之地。另外两个拿到VC投资的明星团队,FixieDust 就在这个方向做了尝试,定义了各自的LLM应用的形态,并为这一应用形态打造了支持平台,都能做到几行代码就能上线应用,有点类似于LLM应用领域的Vercel。

Fixie 拿到了1700万美元的种子轮融资,Dust拿到500万美元。Dust团队只有两个人,3月份才成立公司,一成立就有几大明星VC疯抢,最后由红杉完成投资。两个公司的主创团队都是星光熠熠,看点十足。

言归正传,本文浅谈一下这两个产品的体验感受。

公司
URL
融资
Fixiehttps://fixie.ai/RedPoint $17M
Dust
https://dust.tt/ Sequoia $5M

Fixie

Fixie的定位是大型语言模型的自动化平台,用户可以通过Fixie开发和部署基于LLM的服务应用。Fixie把LLM作为自动化的中枢大脑,定义了一套与中枢大脑交互的方式,依靠LLM输出指令来实现自动化。跟LLM交互的方式和ChatGPT Plugins类似,可以说Fixie也是一种AutoGPT实现,简单类比的话,可以认为它是AutoGPT + ChatGPT Plugins。

Fixie框架

Fixie的核心概念就是Agent,一个调用LLM的Agent。Agent是一个LLM的封装,Fixie主要定义了Agent协议,并提供了一些框架层的实现。

Agent协议

Agent 协议定义了一个标准的Plugin接口, 基于HTTP, 给LLM大脑提供参数和功能。

接口协议

  1. 1. 基于HTTP,可以做到语言无关,跨进程。

2.调用参数和返回值都是纯文本,自然语言,LLM友好

接口功能

  1. 1. 获取当前Agent的GPT设置,主要是Base Prompt以及Few Shot Example,用于组装查询GPT的Prompt

2.Function调用,即LLM可以调用的自定义功能函数

Agent SDK

Fixie实现了Agent基础类,这样编写一个Agent只需要关注自己的业务逻辑。Agent基类里目前调用比较多的是CodeShotAgent,使用这个Agent只需要提供Prompt模版和注册自己的私有Function就行了。当然,Agent里可以实现任何代码,可以调用数据库,或者实现特定的业务逻辑等。

import fixieai
BASE_PROMPT = "Base prompt for the agent."FEW_SHOTS = """Q: Example query for the agentAsk Func[my_func]: query to the funcFunc[my_func] says: response to the queryA: Response generated by the agent
Q: Second example query to the agentA: Second response generated by the agent"""
agent = fixieai.CodeShotAgent(BASE_PROMPT, FEW_SHOTS)
@agent.register_func()def my_func(query: fixieai.Message) -> str: return "Response to the query"

两层AutoGPT

实现方式

执行方式类似AutoGPT, 把LLM作为决策大脑,把指令集 + 指令示例 + 任务目标传给LLM,得到结果。实际处理分为两层:

一层是Agent路由器:通过把Agent的描述和当前目标提交给LLM, 选择合适的Agent。

二层是Agent任务执行:选中Agent之后,任务会被传递给指定Agent,完成调用。Agent完成任务可能需要调用多个Function,这个过程的自动化也由LLM完成。

实际效果

实际效果跟其他AutoGPT示例一样,简单任务完成得很不错,复杂任务很难完成。当然,一个实际的应用,实际需要两部分的努力:

  1. 1. 可用指令的定义:一个比较High Level的DSL,要定义得比较清晰,简洁而且够用。

  2. 2. Prompt的优化:让LLM输出更有效的指令。

案例一:成功

任务是查询Tesla股票表现,比较简单。

辗转几个Agent,找到Stock Agent,查询外部市场数据,顺利完成。

案例二:失败

任务是查询NYSE最值得投资的中国公司Top 5。

分别调用Financial Assistant, Stock等几个Agent,但是最终没有完成任务,卡在获取NYSE上市的中国公司数据这里了。LLM不知道答案,而Stock Agent缺乏对应的功能函数来获取数据。估计补充"list"指令之后,就可以完成任务了。

思考

Fixie Agent看起来还是一个跟ChatGPT Plugins 类似的产品。虽然Agent的封装也只是薄薄的一层,一个自己的Plugins框架的实现,理论上可以支持无缝切换其他的LLM模型。成为一个入口级的应用看起来比较困难,不过有可能会成为一个Zapier这样的API聚合器。

Dust

Dust雄心勃勃地针对目前主流的LLM应用形态,打造了一个低代码平台。一般应用会考虑结合Vector DB和Semantic Search来给LLM补充上下文信息,Dust就直接把这些封装成标准的组建,用户不需要考虑实现细节,通过配置就能在平台上定义出自己的LLM应用来。

实现方式

基于Block的模块化架构

每个模块会封装成一个Block, Block是一个模板方法,有固定的执行逻辑,接收输入参数,返回结果。用户在使用Block的时候,可以定义Block的配置。例如一个调用LLM的Block Instance就需要指定调用的模型,prompt template等参数。

常用的操作会被封装为对应的Block,用户只需要简单地拖拽几个Block到一个流程里,就可以完成一个LLM应用了。Block除了有功能性Block以外,也有Code Block,用来嵌入代码,以及Loop block,用来循环执行。

可配置的顺序执行流程

具体的实现方式是程序逻辑由一个Block列表组成,执行的时候由Block顺序执行。如果要表达比较复杂的程序逻辑,顺序执行估计是不够的。而如果不同的Block之间有比较多的逻辑协同,这个流程的描述就会非常复杂。所以大概的平衡就是复杂逻辑封装在Block里,主流程只是几个Block的简单组合。

看一个实际的例子,即使是一个比较简单的任务,也需要几个Code Block。

通过流程配置来描述程序逻辑这件事,总给人一种古典的感觉,不太像这个时代的做法。这一点上Vercel的边界感,就好一些,并没有介入程序逻辑,也没有人为地分割开发者的开发流程。

相关资源可配置

Dust的定位是一个Serverless平台,构建应用所需要的其他资源都有对应的配置界面,比如Data Source, 外部API等。这样基本上零代码就可以把应用搭建起来了。

思考

一句话来概括Dust就是低代码设置,快速上线LLM 应用。与Fixie的最大区别是它的执行流程由流程配置决定,而不是LLM。Dust是LLM的一层Wrapper,而Fixie的定位是AutoGPT Agent。不过Fixie的定位基本与ChatGPT Plugins重叠,后续OpenAI开放了Plugins之后,可能Fixie的作用就更薄了。

两个平台比较的话,Dust的定位更清晰,更聚焦,不过零代码的目标感觉会是一个很大的制约。


欢迎关注本公众号并添加星标,这里记录了一个星战迷/工程师/父亲的学习笔记,偶尔也会分享生活中的趣事

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存